10 SYS700 20 .OPT OO 30 *=$7000 40 POI = $FB 50 CHROUT = $FFD2 99 ;----------------------------------- 100 JSR PARAM ;1=COMMIE 2,3,4,5=EPSON 110 TYA 120 BEQ HOP120 ;ERROR 130 CMP #6 140 BCS HOP120 ;ERROR 150 CMP #1 160 BEQ HOP160 170 STA EPSON25 ;SAVE FOR SENDCTRL TYPE 180 JMP DOEPSON 190 HOP160 JMP DOCOMMIE 195 HOP120 RTS ;EXIT IF # OUT OF RANGE 200 ;---------------------------------- 210 PARAM = * ;GET PARAMETER FROM BASIC 220 JSR $AEFD 230 JSR $AD9E 240 JMP $B7F7 ;A=HB Y=LB 300 ;---------------------------------- 310 GRAB = * ;GET BYTE AT X0-39 Y0-199 320 STX TEMPXDG 330 STY TEMPYDG ;SAVE THESE 340 LDA #0 350 STA POI+1 ;HB=0 360 TYA 370 AND #%11111000 ;8*INT(Y/8) 380 ASL:ROL POI+1 ;*16 390 ASL:ROL POI+1 ;*32 400 ASL:ROL POI+1 ;*64 410 STA POI 420 STA TEMPL64 ;(NEEDED FOR *320 CALC) 430 LDA POI+1 440 STA TEMPH64 450 ASL POI:ROL POI+1 ;*128 460 ASL POI:ROL POI+1 ;*256 470 CLC 480 LDA POI 490 ADC TEMPL64 500 STA POI ;ADD *256 & *64 TO GET *320 510 LDA POI+1 520 ADC TEMPH64 530 STA POI+1 540 TXA 550 ASL:ASL:ASL ;8*CELLX 560 PHP ;SAVE IF CELLX>=32 STATUS 570 CLC 580 ADC POI 590 STA POI ;ADD IT 600 LDA POI+1 605 ADC #>8192 ;ADD BITMAP'S HB! 610 STA POI+1 620 PLP 630 BCC HOP630 640 INC POI+1 ;INC HB IF CELLX>=32 650 HOP630 TYA 660 AND #7 ;ADD Y AND 7 670 CLC 680 ADC POI 690 STA POI 700 BCC HOP700 705 INC POI+1 710 HOP700 LDY #0 720 LDA (POI),Y ;*** GET BYTE !!! *** 730 LDX TEMPXDG 740 LDY TEMPYDG ;RESTORE THESE 750 RTS 800 ;---------------------------------- 810 DOROW1 = * ;DO LEFT 4 BITS OF COL 820 LDY #199 830 LUP920 JSR GRAB ;GET BYTE 840 LSR:LSR:LSR:LSR 850 TAY 860 LDA FATLINE,Y ;GET BYTE FOR PRINTER 870 JSR CHROUT ;AND SEND IT TWICE 875 JSR CHROUT 880 LDX TEMPXDG 890 LDY TEMPYDG 900 DEY 910 CPY #255 ;DONE COLUMN"? 920 BNE LUP920 930 RTS 1000 ;[171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171] 1010 D[176]OW2 [178] [172] ;DO RIGHT 4 BITS OF COL 1020 LDY #199 1030 LUP1120 JSR GRAB ;[161] BYTE 1040 [175] #15 1050 TAY 1060 LDA FATLINE,Y ;[161] [153]ER BYTE 1070 JSR CHROUT ;[175] S[128] IT TWICE 1075 JSR CHROUT 1080 LDX TEMPXDG 1090 LDY TEMPYDG 1100 DEY 1110 CPY #255 ;D[145]E COLUMN"? 1120 BNE LUP1120 1130 RTS 1200 ;--------------------------------- 1210 SENDCTRL = * ;SEND CONTROL CODES 1212 TXA:PHA 1220 LDX EPSON25 ;WHICH DRIVER 2-5"? 1230 LDY DRIVERS[171]2,X ;(OFFSETS) 1240 LUP1280 LDA ALLCODES,Y 1250 BEQ HOP1250 1260 JSR CHROUT ;S[128] [154]ROL CODES... 1270 INY 1280 JMP LUP1280 1290 HOP1250 PLA:TAX 1295 RTS 1500 ;[171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171] 1510 DOEPS[145] [178] [172] ;[153] BITMAP [145] EPS[145] 1520 LDX #0 1530 LUP1630 JSR S[128]CTRL ;GRAPHICS [145] 1540 JSR D[176]OW1 ;LEFT 1[173]2 OF COLUMN 1550 LDA #13 1560 JSR CHROUT 1570 JSR S[128]CTRL ;GRAPHICS [145] 1580 JSR D[176]OW2 ;RIGHT 1[173]2 OF COLUMN 1590 LDA #13 1600 JSR CHROUT 1610 INX 1620 CPX #40 ;D[145]E ENTIRE SCREEN"? 1630 BNE LUP1630 1640 RTS 2000 ;--------------------------------- 2010 DOCOMMIE = * ;PRINT BITMAP ON C= 2020 LDA #0 2030 STA CUR7PINX ;HORIZ B'MAP COUNTER 2040 STA CUR7PINX+1 2050 STA FLIP7PIN ;IF BIT7 THEN PIN 7 IS SINGLE (ELSE 1 IS) 2100 LUP2260 JSR COLUMN7 ;*** SEND COLUMN *** 2110 LDA FLIP7PINX 2120 ASL 2130 LDA #3 ;ADD 3 OR 4 TO CURPINX 2140 ADC CUR7PINX 2150 STA CUR7PINX 2160 BCC HOP2160 2170 INC CUR7PINX+1 2180 HOP2160 LDA FLIP7PIN 2190 EOR #128 ;TOGGLE PATTERN (1122334 TO 1223344) 2200 STA FLIP7PIN 2210 SEC 2220 LDA CUR7PINX ;CHECK IF BITMAP DONE 2230 SBC #<320 2240 LDA CUR7PINX+1 2250 SBC #>320 2260 BCC LUP2260 2270 RTS 2400 ;--------------------------------- 2410 BYTEFOR7 = * ;GET BYTE FROM BITMAP 2420 LDA #7 2430 STA BITSTODO ;7 BITS FOR 7 PINS 2440 LDA CUR7PINX 2450 STA PEEKX 2460 LDA CUR7PINX+1 ;FOR CHEKPEEK 2470 STA PEEKX+1 2480 LDA #0 2490 STA RORTHIS ;WORK BYTE 2500 LUP2540 JSR CHEKPEEK ;CHECK BIT 2510 ROR RORTHIS 2520 JSR ADVANCE 2530 DEC BITSTODO ;DONE ALL"? 2540 BNE LUP2540 2550 SEC 2560 R[176] R[176]THIS ;SET BIT 7 (C[178] [153]ERS NEED THIS!) 2570 RTS 2600 ;[171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171] 2610 ADVANCE [178] [172] ;INC [194]X PROPERLY 2620 BIT FLIP7PIN 2630 BMI HOP2630 ;PATTERN [129] BIT PAIRS 2640 LDA BITS[164]DO 2650 LSR 2660 BCC HOP2660 2670 RTS 2700 HOP2630 LDA BITS[164]DO 2710 LSR 2720 BCS HOP2660 2730 RTS 2800 HOP2660 INC [194]X 2810 BNE HOP2810 2820 INC [194]X[170]1 2830 HOP2810 RTS 2900 ;[171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171] 2910 S[128]CTR7 [178] [172] ;S[128] CTRLCODES [129] 7 2920 LDX #0 2930 LUP2970 LDA CTRL[129]7,X 2940 BEQ HOP2940 2950 JSR CHROUT 2960 INX 2970 JMP LUP2970 2980 HOP2940 RTS 3000 ;[171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171][171] 3010 COLUMN7 [178] [172] ;S[128] COLUMN [129] 7[171]PIN 3020 JSR S[128]CTR7 ;GRAPHIC [145] 3030 LDA #199 3040 STA [194]Y 3050 LUP3120 JSR BYTE[129]7 ;[161] BYTE 3060 LDA R[176]THIS 3070 JSR CHROUT ;S[128] IT TWICE 3080 JSR CHROUT 3090 DEC [194]Y 3100 LDA [194]Y 3110 CMP #255 ;D[145]E COLUMN"? 3120 BNE LUP3120 3130 LDA #13 ;SEND CARRIAGE RETURN 3140 JMP CHROUT ;(& RTS) 3200 ;--------------------------------- 3210 CHEKPEEK = * ;SENDS BIT-STATE @PEEKX/Y BACK IN CARRY 3220 LDA #0 3230 STA POI+1 ;HB;0 3240 LDA PEEKY 3250 LSR:LSR:LSR ;INT (Y/8) 3260 STA POI ;(SAVE *1) 3270 ASL:ASL ;*4 3280 CLC 3290 ADC POI 3300 STA POI ;*5 3310 LDY #6 3320 LUP3350 ASL POI ;*10,*20,*40,*80,*160,*320 3330 ROL POI+1 3340 DEY 3350 BNE LUP3350 3360 CLC 3370 LDA PEEKX 3380 AND #%11111000 ;8*INT(X/8) 3390 ADC POI 3400 STA POI 3410 LDA POI+1 3420 ADC PEEKX+1 ;HB OK AS IS 3430 STA POI+1 3440 CLC 3450 LDA PEEKY 3460 AND #7 3470 ADC POI ;(Y AND 7 FOR WITHIN CELL) 3480 STA POI 3490 LDA POI+1 3500 ADC #>8192 ;ADD BITMAP'S HB 3510 STA POI+1 3520 LDA PEEKX 3530 AND #7 ;READY BIT MASK 3540 TAX 3550 LDY #0 3560 LDA (POI),Y 3570 AND BITMASKS,X 3580 PHP ;*** SAVE POSSIBLE RESULT *** 3590 SEC 3600 LDA PEEKX 3610 SBC #<320 3620 LDA PEEKX+1 3630 SBC #>320 3640 BCC HOP3640 ;OK - IS IN RANGE 3650 PLP 3660 CLC ;OUT OR RANGE = ALWAYS CLEAR! 3670 RTS 3700 HOP3640 PLP 3710 BEQ HOP3710 3720 SEC ;IN RANGE AND SET 3730 RTS 3750 HOP3710 CLC ;IN RANGE AND CLEAR 3760 RTS 5000 ;--------------------------------- 5010 TEMPXDG .BYTE 0 5020 TEMPYDG .BYTE 0 5030 TEMPL64 .BYTE 0 5040 TEMPH64 .BYTE 0 5050 EPSON25 .BYTE 0 5100 FATLINE = * ;DOUBLE WIDTH NYBBLES! 5110 .BYTE %00000000 5120 .BYTE %00000011 5130 .BYTE %00001100 5140 .BYTE %00001111 5150 .BYTE %00110000 5160 .BYTE %00110011 5170 .BYTE %00111100 5180 .BYTE %00111111 5210 .BYTE %11000000 5220 .BYTE %11000011 5230 .BYTE %11001100 5240 .BYTE %11001111 5250 .BYTE %11110000 5260 .BYTE %11110011 5270 .BYTE %11111100 5280 .BYTE %11111111 5300 ALLCODES = * ;4 PRINTER DRIVERS 5310 D2 .BYTE 32,32,32,32,32,32,27,49,27,75,<400,>400,0 5320 D3 .BYTE 32,32,32,32,32,32,27,49,27,203,<400,>400,0 5330 D4 .BYTE 32,32,32,32,32,32,27,65,8,27,75,<400,>400,0 5340 D5 .BYTE 32,32,32,32,32,32,27,193,8,27,203,<400,>400,0 5350 DRIVERS .BYTE D2-ALLCODES,D3-ALLCODES,D4-ALLCODES,D5-ALLCODES ;OFFSETS 6000 ;--------------------------------- 6010 PEEKX .BYTE 0,0 6020 PEEKY .BYTE 0 6030 CUR7PINX .BYTE 0,0 6040 FLIP7PIN .BYTE 0 6050 RORTHIS .BYTE 0 6060 BITSTODO .BYTE 0 6200 BITMASKS .BYTE 128,64,32,16,8,4,2,1 ;FOR CHEKPEEK 6210 CTRLFOR7 .BYTE 15,32,32,32,32,32,32,8,0 ;FOR 7-PIN 63000 ;-------------------------------- 63998 .END:END 63999 A$="PSF.CHARTER 2":OPEN15,8,15,"S0:"+A$:CLOSE15:SAVEA$,8